﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.IO;
using RutoDeBaredDatabase;
using System.IO.IsolatedStorage;

namespace RutoDeBared
{
    class XMLDocumentLezer
    {
        private Database database = new Database("Data Source=isostore:/BestandsNaam.sdf");
        private int routeSleutel;
        public XMLDocumentLezer()
        {
            if (database.DatabaseExists() == false)
            {
                // Create the local database. 
                database.CreateDatabase();
            }
            leesXMLDocument();
        }

        public void leesXMLDocument()
        {
            try
            {
                XDocument doc = null;
                using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication())
                {
                    using (IsolatedStorageFileStream isoStream = isoStore.OpenFile("routes.dat", FileMode.Open, FileAccess.Read))
                    {
                        doc = XDocument.Load(isoStream);
                    }
                }
                if (doc == null)
                {
                    throw new Exception("uhoh, bestand niet gevonden in isolated storage");
                }
                var route = doc.Root.Element("Route");
                string routeTitel = route.Attribute("Titel").Value;
                string routeBeschrijvingNL = route.Attribute("BeschrijvingNL").Value;
                string routeBeschrijvingEN = route.Attribute("BeschrijvingEN").Value;
                voegRouteToe(routeTitel, routeBeschrijvingNL, routeBeschrijvingEN);
                var bezienswaardigheden = route.Element("Bezienswaardigheden").Elements("bezienswaardigheid");

                foreach (var bezienswaardigheid in bezienswaardigheden)
                {
                    string bezienswaardigheidTitel = bezienswaardigheid.Attribute("Titel").Value;
                    string bezienswaardigheidBeschrijvingNL = bezienswaardigheid.Attribute("BeschrijvingNL").Value;
                    string bezienswaardigheidBeschrijvingEN = bezienswaardigheid.Attribute("BeschrijvingEN").Value;
                    string lengtegraad = bezienswaardigheid.Element("Locatie").Element("Lengtegraad").Value;
                    string breedtegraad = bezienswaardigheid.Element("Locatie").Element("Breedtegraad").Value;
                    string afbeeldingPath = bezienswaardigheid.Element("Afbeeldingen").Element("afbeelding").Attribute("FilePath").Value;
                    string afbeeldingNaam = bezienswaardigheid.Element("Afbeeldingen").Element("afbeelding").Attribute("Naam").Value;
                    voegBezienswaardigheidToe(bezienswaardigheidTitel, bezienswaardigheidBeschrijvingNL, bezienswaardigheidBeschrijvingEN, double.Parse(lengtegraad), double.Parse(breedtegraad), afbeeldingPath, afbeeldingNaam);
                }

            }
            catch (DllNotFoundException e)
            {
                System.Diagnostics.Debug.WriteLine(e.StackTrace);
            }
            
            

        }

        private void voegRouteToe(string titel, string beschrijvingNL, string beschrijvingEN)
        {
            Database.Route r = new Database.Route();
            r.Stad = "Breda";
            r.BeschrijvingENG = beschrijvingEN;
            r.BeschrijvingNL = beschrijvingNL;
            r.TitelENG = titel;
            r.TitelNL = titel;
            routeSleutel = r.RouteSleutel;
            database.Routes.InsertOnSubmit(r);
            database.SubmitChanges();
        }

        public void voegBezienswaardigheidToe(string titel, string beschrijvingNL, string beschrijvingEN, double lengtegraad, double breedtegraad, string afbeeldingPath, string afbeeldingNaam)
        {
            Database.Bezienswaardigheid b = new Database.Bezienswaardigheid();
            b.AbeeldingLocatie = afbeeldingPath;
            b.BeschrijvingENG = beschrijvingEN;
            b.BeschrijvingNL = beschrijvingNL;
            b.Bretegraad = breedtegraad;
            b.Lengtegraad = lengtegraad;
            b.TitelNL = titel;
            b.TitelENG = titel;
            database.Bezienswaardigheiden.InsertOnSubmit(b);
            Database.Bezienswaardigheid_Route br = new Database.Bezienswaardigheid_Route { RouteSleutel = routeSleutel, BezienswaardigheidSleutel = b.BezienswaardigheidSleutel, volgnummer = 0 };
            database.Bezienswaardigheidroute.InsertOnSubmit(br);
            database.SubmitChanges();
        }
    }
}
